#include "mythread.h"

myThread::myThread(QObject *parent)
    : QThread(parent)
{
    screen = QApplication::primaryScreen();// 获取当前设备中，默认的屏幕设备，并用screen管理
    stopped=false;
}

void myThread::stopping()
{
    stopped=true;
}

void myThread::reset()
{
    stopped=false;
}

void myThread::run()
{
    this->reset();
        if (!screen) { // 使用成员变量screen
            screen = QGuiApplication::primaryScreen();
            if (!screen) {
                qDebug() << "无法获取屏幕设备";
                return;
            }
        }

    while(1) {
        // 限制捕获区域（避免超高清分辨率导致处理压力）
        QRect screenRect = screen->geometry();
        int maxWidth = 1280;  // 降低分辨率至1280x720（平衡清晰度和性能）
        int maxHeight = 720;
        QSize scaledSize = screenRect.size().scaled(maxWidth, maxHeight, Qt::KeepAspectRatio);
        QRect captureRect(
            screenRect.x() + (screenRect.width() - scaledSize.width()) / 2,  // 水平居中
            screenRect.y() + (screenRect.height() - scaledSize.height()) / 2, // 垂直居中
            scaledSize.width(),
            scaledSize.height()
        );

        // 捕获桌面并转换为ARGB32格式（Qt处理最稳定的格式）
        QPixmap pic = screen->grabWindow(0, captureRect.x(), captureRect.y(), captureRect.width(), captureRect.height());
        QImage image = pic.toImage().convertToFormat(QImage::Format_ARGB32);  // 统一格式

        if (!image.isNull()) {
            emit sndDesk(QPixmap::fromImage(image));
        } else {
            qDebug() << "桌面捕获失败，图片为空";
        }

        this->msleep(100);
        if (this->stopped) {
            break;
        }
    }
    emit threadstopped();
}
